/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

// Spec available from here:
// https://de.scribd.com/document/428086428/OpenProtocol-Specification-R-2-8-0-9836-4415-01

[constants
    [const          uint 16     tcpDefaultPort 4545]
]

[discriminatedType OpenProtocolMessage(uint 24 revision)                                              encoding='"ASCII"'
    [implicit      uint 32              length               'lengthInBytes - 1'                                       ]
    [discriminator Mid                  mid                                                                            ]
    [optional      uint 24              midRevision                                               nullBytesHex='202020']
    [optional      uint 8               noAckFlag                                                 nullBytesHex='20'    ]
    [optional      uint 16              targetStationId                                           nullBytesHex='2020'  ]
    [optional      uint 16              targetSpindleId                                           nullBytesHex='2020'  ]
    [optional      uint 16              sequenceNumber                                            nullBytesHex='2020'  ]
    [optional      uint 8               numberOfMessageParts                                      nullBytesHex='20'    ]
    [optional      uint 8               messagePartNumber                                         nullBytesHex='20'    ]
    [typeSwitch mid
        ['ApplicationCommunicationStart' *ApplicationCommunicationStart
        ]
        ['ApplicationCommunicationStartAcknowledge' *ApplicationCommunicationStartAcknowledge
            [typeSwitch revision
                ['1' *Rev1
                    [const    uint   16  blockIdCellId                    1                                            ]
                    [simple   uint   32  cellId                                                                        ]
                    [const    uint   16  blockIdChannelId                 2                                            ]
                    [simple   uint   16  channelId                                                                     ]
                    [const    uint   16  blockIdControllerName            3                                            ]
                    [simple   string 200 controllerName                                                                ]
                ]
                ['2' *Rev2
                    [const    uint   16  blockIdCellId                    1                                            ]
                    [simple   uint   32  cellId                                                                        ]
                    [const    uint   16  blockIdChannelId                 2                                            ]
                    [simple   uint   16  channelId                                                                     ]
                    [const    uint   16  blockIdControllerName            3                                            ]
                    [simple   string 200 controllerName                                                                ]
                    [const    uint   16  blockIdSupplierCode              4                                            ]
                    [simple   uint   24  supplierCode                                                                  ]
                ]
                ['3' *Rev3
                    [const    uint   16  blockIdCellId                    1                                            ]
                    [simple   uint   32  cellId                                                                        ]
                    [const    uint   16  blockIdChannelId                 2                                            ]
                    [simple   uint   16  channelId                                                                     ]
                    [const    uint   16  blockIdControllerName            3                                            ]
                    [simple   string 200 controllerName                                                                ]
                    [const    uint   16  blockIdSupplierCode              4                                            ]
                    [simple   uint   24  supplierCode                                                                  ]
                    [const    uint   16  blockIdOpenProtocolVersion       5                                            ]
                    [simple   string 152 openProtocolVersion                                                           ]
                    [const    uint   16  blockIdControllerSoftwareVersion 6                                            ]
                    [simple   string 152 controllerSoftwareVersion                                                     ]
                    [const    uint   16  blockIdToolSoftwareVersion       7                                            ]
                    [simple   string 152 toolSoftwareVersion                                                           ]
                ]
                ['4' *Rev4
                    [const    uint   16  blockIdCellId                    1                                            ]
                    [simple   uint   32  cellId                                                                        ]
                    [const    uint   16  blockIdChannelId                 2                                            ]
                    [simple   uint   16  channelId                                                                     ]
                    [const    uint   16  blockIdControllerName            3                                            ]
                    [simple   string 200 controllerName                                                                ]
                    [const    uint   16  blockIdSupplierCode              4                                            ]
                    [simple   uint   24  supplierCode                                                                  ]
                    [const    uint   16  blockIdOpenProtocolVersion       5                                            ]
                    [simple   string 152 openProtocolVersion                                                           ]
                    [const    uint   16  blockIdControllerSoftwareVersion 6                                            ]
                    [simple   string 152 controllerSoftwareVersion                                                     ]
                    [const    uint   16  blockIdToolSoftwareVersion       7                                            ]
                    [simple   string 152 toolSoftwareVersion                                                           ]
                    [const    uint   16  blockIdRbuType                   8                                            ]
                    [simple   string 192 rbuType                                                                       ]
                    [const    uint   16  blockIdControllerSerialNumber    9                                            ]
                    [simple   string 80  controllerSerialNumber                                                        ]
                ]
                ['5' *Rev5
                    [const    uint   16  blockIdCellId                    1                                            ]
                    [simple   uint   32  cellId                                                                        ]
                    [const    uint   16  blockIdChannelId                 2                                            ]
                    [simple   uint   16  channelId                                                                     ]
                    [const    uint   16  blockIdControllerName            3                                            ]
                    [simple   string 200 controllerName                                                                ]
                    [const    uint   16  blockIdSupplierCode              4                                            ]
                    [simple   uint   24  supplierCode                                                                  ]
                    [const    uint   16  blockIdOpenProtocolVersion       5                                            ]
                    [simple   string 152 openProtocolVersion                                                           ]
                    [const    uint   16  blockIdControllerSoftwareVersion 6                                            ]
                    [simple   string 152 controllerSoftwareVersion                                                     ]
                    [const    uint   16  blockIdToolSoftwareVersion       7                                            ]
                    [simple   string 152 toolSoftwareVersion                                                           ]
                    [const    uint   16  blockIdRbuType                   8                                            ]
                    [simple   string 192 rbuType                                                                       ]
                    [const    uint   16  blockIdControllerSerialNumber    9                                            ]
                    [simple   string 80  controllerSerialNumber                                                        ]
                    [const    uint   16  blockIdSystemType                10                                           ]
                    [simple   string 24  systemType                                                                    ]
                    [const    uint   16  blockIdSystemSubtype             11                                           ]
                    [simple   string 24  systemSubtype                                                                 ]
                ]
                ['6' *Rev6
                    [const    uint   16  blockIdCellId                    1                                            ]
                    [simple   uint   32  cellId                                                                        ]
                    [const    uint   16  blockIdChannelId                 2                                            ]
                    [simple   uint   16  channelId                                                                     ]
                    [const    uint   16  blockIdControllerName            3                                            ]
                    [simple   string 200 controllerName                                                                ]
                    [const    uint   16  blockIdSupplierCode              4                                            ]
                    [simple   uint   24  supplierCode                                                                  ]
                    [const    uint   16  blockIdOpenProtocolVersion       5                                            ]
                    [simple   string 152 openProtocolVersion                                                           ]
                    [const    uint   16  blockIdControllerSoftwareVersion 6                                            ]
                    [simple   string 152 controllerSoftwareVersion                                                     ]
                    [const    uint   16  blockIdToolSoftwareVersion       7                                            ]
                    [simple   string 152 toolSoftwareVersion                                                           ]
                    [const    uint   16  blockIdRbuType                   8                                            ]
                    [simple   string 192 rbuType                                                                       ]
                    [const    uint   16  blockIdControllerSerialNumber    9                                            ]
                    [simple   string 80  controllerSerialNumber                                                        ]
                    [const    uint   16  blockIdSystemType                10                                           ]
                    [simple   string 24  systemType                                                                    ]
                    [const    uint   16  blockIdSystemSubtype             11                                           ]
                    [simple   string 24  systemSubtype                                                                 ]
                    [const    uint   16  blockIdSequenceNumberSupport     12                                           ]
                    [reserved uint   7   '0x00'                                                                        ]
                    [simple   bit        sequenceNumberSupport                                                         ]
                    [const    uint   16  blockIdLinkingHandlingSupport    13                                           ]
                    [reserved uint   7   '0x00'                                                                        ]
                    [simple   bit        linkingHandlingSupport                                                        ]
                    [const    uint   16  blockIdStationId                 14                                           ]
                    [simple   string 80  stationId                                                                     ]
                    [const    uint   16  blockIdStationName               15                                           ]
                    [simple   string 200 stationName                                                                   ]
                    [const    uint   16  blockIdClientId                  16                                           ]
                    [simple   uint   8   clientId                                                                      ]
                ]
            ]
        ]
        ['ApplicationCommunicationStop' *ApplicationCommunicationStop
        ]
        ['ApplicationCommandError'      *ApplicationCommandError
            [typeSwitch revision
                ['1' *Rev1
                    [simple Mid            requestMid                                                                  ]
                    [simple ApplicationCommunicationError error                                                        ]
                ]
            ]
        ]
        ['ApplicationCommandAccepted'   *ApplicationCommandAccepted
            [typeSwitch revision
                ['1' *Rev1
                    [simple Mid            midNumberAccepted                                                           ]
                ]
            ]
        ]
        ['ApplicationGenericDataRequest' *ApplicationGenericDataRequest
            [typeSwitch revision
                ['1' *Rev1
                    [simple   Mid                  requestMid                                                          ]
                    [simple   uint 24              wantedRevision                                                      ]
                    [implicit uint 16              extraDataLength 'COUNT(extraData)'                                  ]
                    [array    byte                 extraData       count 'extraDataLength'                             ]
                ]
            ]
        ]
        ['ApplicationGenericSubscription' *ApplicationGenericSubscription
            [typeSwitch revision
                ['1' *Rev1
                    [simple   Mid                  subscriptionMid                                                     ]
                    [simple   uint 24              wantedRevision                                                      ]
                    [implicit uint 16              extraDataLength 'COUNT(extraData)'                                  ]
                    [array    byte                 extraData       count 'extraDataLength'                             ]
                ]
            ]
        ]
        ['ApplicationGenericUnsubscribe' *ApplicationGenericUnsubscribe
            [typeSwitch revision
                ['1' *Rev1
                    [simple   Mid                  subscriptionMid                                                     ]
                    [simple   uint 24              extraDataRevision                                                   ]
                    [implicit uint 16              extraDataLength 'COUNT(extraData)'                                  ]
                    [array    byte                 extraData       count 'extraDataLength'                             ]
                ]
            ]
        ]
        ['ParameterSetIdUploadRequest' *ParameterSetIdUploadRequest
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['ParameterSetIdUploadReply' *ParameterSetIdUploadReply
            [typeSwitch revision
                ['1' *Rev1
                    [implicit uint 24                numParameters      'COUNT(parameters)'                            ]
                    [array    uint 24                parameters         count 'numParameters'                          ]
                ]
                ['2' *Rev2
                    [implicit uint 24                numParameters      'COUNT(parameters)'                            ]
                    [array    uint 24                parameters         count 'numParameters'                          ]
                    [array    uint 16                numberOfCycles     count 'numParameters'                          ]
                ]
                ['3' *Rev3
                    [implicit uint 24                numParameters      'COUNT(parameters)'                            ]
                    [array    uint 24                parameters         count 'numParameters'                          ]
                    [array    uint 16                numberOfCycles     count 'numParameters'                          ]
                    [array    uint 32                typeOfProgram      count 'numParameters'                          ]
                ]
            ]
        ]
        ['ParameterSetDataUploadRequest' *ParameterSetDataUploadRequest
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint 24                parameterSetId                                                    ]
                ]
                ['2' *Rev2
                    [simple   uint 24                parameterSetId                                                    ]
                ]
                // Note Rev 3 & 4 are Toyota specific
                // If Toyota had the money and the power to get these updates into the spec,
                // they have enough money to support Open-Source.
            ]
        ]
        ['ParameterSetDataUploadReply' *ParameterSetDataUploadReply
            [typeSwitch revision
                ['1' *Rev1
                    [const    uint   16  blockIdParameterSetId    1                                                    ]
                    [simple   uint   24  parameterSetId                                                                ]
                    [const    uint   16  blockIdParameterSetName  2                                                    ]
                    [simple   string 200 parameterSetName                                                              ]
                    [const    uint   16  blockIdRotationDirection 3                                                    ]
                    [simple   RotationDirection rotationDirection                                                      ]
                    [const    uint   16  blockIdBatchSize         4                                                    ]
                    [simple   uint   16  batchSize                                                                     ]
                    [const    uint   16  blockIdTorqueMin         5                                                    ]
                    [simple   uint   48  torqueMin                                                                     ]
                    [const    uint   16  blockIdTorqueMax         6                                                    ]
                    [simple   uint   48  torqueMax                                                                     ]
                    [const    uint   16  blockIdTorqueFinalTarget 7                                                    ]
                    [simple   uint   48  torqueFinalTarget                                                             ]
                    [const    uint   16  blockIdAngleMin          8                                                    ]
                    [simple   uint   40  angleMin                                                                      ]
                    [const    uint   16  blockIdAngleMax          9                                                    ]
                    [simple   uint   40  angleMax                                                                      ]
                    [const    uint   16  blockIdFinalAngleTarget  10                                                   ]
                    [simple   uint   40  finalAngleTarget                                                              ]
                ]
                ['2' *Rev2
                    [const    uint   16  blockIdParameterSetId    1                                                    ]
                    [simple   uint   24  parameterSetId                                                                ]
                    [const    uint   16  blockIdParameterSetName  2                                                    ]
                    [simple   string 200 parameterSetName                                                              ]
                    [const    uint   16  blockIdRotationDirection 3                                                    ]
                    [simple   RotationDirection rotationDirection                                                      ]
                    [const    uint   16  blockIdBatchSize         4                                                    ]
                    [simple   uint   16  batchSize                                                                     ]
                    [const    uint   16  blockIdTorqueMin         5                                                    ]
                    [simple   uint   48  torqueMin                                                                     ]
                    [const    uint   16  blockIdTorqueMax         6                                                    ]
                    [simple   uint   48  torqueMax                                                                     ]
                    [const    uint   16  blockIdTorqueFinalTarget 7                                                    ]
                    [simple   uint   48  torqueFinalTarget                                                             ]
                    [const    uint   16  blockIdAngleMin          8                                                    ]
                    [simple   uint   40  angleMin                                                                      ]
                    [const    uint   16  blockIdAngleMax          9                                                    ]
                    [simple   uint   40  angleMax                                                                      ]
                    [const    uint   16  blockIdFinalAngleTarget  10                                                   ]
                    [simple   uint   40  finalAngleTarget                                                              ]
                    [const    uint   16  blockIdFirstTarget       11                                                   ]
                    [simple   uint   48  firstTarget                                                                   ]
                    [const    uint   16  blockIdStartFinalAngle   12                                                   ]
                    [simple   uint   48  startFinalAngle                                                               ]
                ]
                // Note Rev 3 & 4 are Toyota specific
                // If Toyota had the money and the power to get these updates into the spec,
                // they have enough money to support Open-Source.
            ]
        ]
        ['ParameterSetSelectedSubscribe' *ParameterSetSelectedSubscribe
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['ParameterSetSelected' *ParameterSetSelected
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint   24  parameterSetId                                                                ]
                    [simple   string 152 dateOfLastChangeInParameterSetSetting                                         ]
                ]
                ['2' *Rev2
                    [const    uint   16         blockIdParameterSetId    1                                             ]
                    [simple   uint   24         parameterSetId                                                         ]
                    [const    uint   16         blockIdParameterSetName  2                                             ]
                    [simple   string 200        parameterSetName                                                       ]
                    [const    uint   16         blockIdDateOfLastChangeInParameterSetSetting  3                        ]
                    [simple   string 152        dateOfLastChangeInParameterSetSetting                                  ]
                    [const    uint   16         blockIdRotationDirection 4                                             ]
                    [simple   RotationDirection rotationDirection                                                      ]
                    [const    uint   16         blockIdBatchSize         5                                             ]
                    [simple   uint   16         batchSize                                                              ]
                    [const    uint   16         blockIdTorqueMin         6                                             ]
                    [simple   uint   48         torqueMin                                                              ]
                    [const    uint   16         blockIdTorqueMax         7                                             ]
                    [simple   uint   48         torqueMax                                                              ]
                    [const    uint   16         blockIdTorqueFinalTarget 8                                             ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdAngleMin          9                                             ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax          10                                            ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget  11                                            ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdFirstTarget       12                                            ]
                    [simple   uint   48         firstTarget                                                            ]
                    [const    uint   16         blockIdStartFinalAngle   13                                            ]
                    [simple   uint   48         startFinalAngle                                                        ]
                ]
            ]
        ]
        ['ParameterSetSelectedAcknowledge' *ParameterSetSelectedAcknowledge
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['ParameterSetSelectedUnsubscribe' *ParameterSetSelectedUnsubscribe
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['SelectParameterSet' *SelectParameterSet
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint   24         parameterSetId                                                         ]
                ]
            ]
        ]
        ['SetParameterSetBatchSize' *SetParameterSetBatchSize
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint   24         parameterSetId                                                         ]
                    [simple   uint   16         batchSize                                                              ]
                ]
            ]
        ]
        ['ResetParameterSetBatchCounter' *ResetParameterSetBatchCounter
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint   24         parameterSetId                                                         ]
                ]
            ]
        ]
        ['LockAtBatchDoneSubscribe' *LockAtBatchDoneSubscribe
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['LockAtBatchDoneUpload' *LockAtBatchDoneUpload
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint   8          relayStatus                                                            ]
                ]
            ]
        ]
        ['LockAtBatchDoneUploadAcknowledge' *LockAtBatchDoneUploadAcknowledge
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['LockAtBatchDoneUnsubscribe' *LockAtBatchDoneUnsubscribe
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        // Note MID 0025 is Toyota specific
        // If Toyota had the money and the power to get these updates into the spec,
        // they have enough money to support Open-Source.

        ['DisableTool' *DisableTool
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['EnableTool' *EnableTool
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]

        ['LastTighteningResultDataSubscribe' *LastTighteningResultDataSubscribe
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['LastTighteningResultData' *LastTighteningResultData
            [typeSwitch revision
                ['1' *Rev1
                    [const    uint   16         blockIdCellId                                      1                   ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                   2                   ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                        3                   ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                   4                   ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                       5                   ]
                    [simple   uint   16         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetId                              6                   ]
                    [simple   uint   24         parameterSetId                                                         ]
                    [const    uint   16         blockIdBatchSize                                   7                   ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                                8                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                            9                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdTorqueStatus                                10                  ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                 11                  ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdTorqueMinLimit                              12                  ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                              13                  ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                           14                  ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                      15                  ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                    16                  ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                    17                  ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                            18                  ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                       19                  ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdTimeStamp                                   20                  ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeIndParameterSetSettings 21                  ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [const    uint   16         blockIdBatchStatus                                 22                  ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTighteningId                                23                  ]
                    [simple   string 80         tighteningId                                                           ]
                ]
                ['2' *Rev2
                    [const    uint   16         blockIdCellId                                     1                    ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                  2                    ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                       3                    ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                  4                    ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                      5                    ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetNumber                         6                    ]
                    [simple   uint   24         parameterSetNumber                                                     ]
                    [const    uint   16         blockIdStrategy                                   7                    ]
                    [simple   Strategy          strategy                                                               ]
                    [const    uint   16         blockIdStrategyOptions                            8                    ]
                    // We don't need all 5 bytes to implement all bits.
                    [reserved uint 8            '0x30'                                                                 ]
                    [simple   uint 32           strategyOptions                                                        ]
                    [virtual  bit               strategyOptionRbwMonitoring     '(strategyOptions & 0x0001) == 0x0001' ]
                    [virtual  bit               strategyOptionClickWrench       '(strategyOptions & 0x0002) == 0x0002' ]
                    [virtual  bit               strategyOptionDsControl         '(strategyOptions & 0x0004) == 0x0004' ]
                    [virtual  bit               strategyOptionCm                '(strategyOptions & 0x0008) == 0x0008' ]
                    [virtual  bit               strategyOptionRundown           '(strategyOptions & 0x0010) == 0x0010' ]
                    [virtual  bit               strategyOptionSelfTap           '(strategyOptions & 0x0020) == 0x0020' ]
                    [virtual  bit               strategyOptionPvtCompensate     '(strategyOptions & 0x0040) == 0x0040' ]
                    [virtual  bit               strategyOptionPvtMonitoring     '(strategyOptions & 0x0080) == 0x0080' ]
                    [virtual  bit               strategyOptionBatch             '(strategyOptions & 0x0100) == 0x0100' ]
                    [virtual  bit               strategyOptionAngle             '(strategyOptions & 0x0200) == 0x0200' ]
                    [virtual  bit               strategyOptionTorque            '(strategyOptions & 0x0400) == 0x0400' ]
                    [const    uint   16         blockIdBatchSize                                  9                    ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                               10                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                           11                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdBatchStatus                                12                   ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTorqueStatus                               13                   ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                14                   ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdRundownAngleStatus                         15                   ]
                    [simple   Status            rundownAngleStatus                                                     ]
                    [const    uint   16         blockIdCurrentMonitoringStatus                    16                   ]
                    [simple   Status            currentMonitoringStatus                                                ]
                    [const    uint   16         blockIdSelfTapStatus                              17                   ]
                    [simple   Status            selfTapStatus                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringStatus              18                   ]
                    [simple   Status            prevailTorqueMonitoringStatus                                          ]
                    [const    uint   16         blockIdPrevailTorqueCompensateStatus              19                   ]
                    [simple   Status            prevailTorqueCompensateStatus                                          ]
                    [const    uint   16         blockIdTighteningErrorStatus                      20                   ]
                    // Unfortunately we can only parse unsigned ints up to 64 bits, in this case we need to do a little
                    // detour and parse it as a string, and then use a StaticHelper to parse the string and check if a
                    // bit is set.
                    [simple   string 80         tighteningErrorStatus                                                  ]
                    [virtual  bit               tighteningErrorStatusRundownAngleMaxShutOff            'STATIC_CALL("isBitSet", tighteningErrorStatus, 1)']
                    [virtual  bit               tighteningErrorStatusRundownAngleMinShutOff            'STATIC_CALL("isBitSet", tighteningErrorStatus, 2)']
                    [virtual  bit               tighteningErrorStatusTorqueMaxShutOff                  'STATIC_CALL("isBitSet", tighteningErrorStatus, 3)']
                    [virtual  bit               tighteningErrorStatusAngleMaxShutOff                   'STATIC_CALL("isBitSet", tighteningErrorStatus, 4)']
                    [virtual  bit               tighteningErrorStatusSelfTapTorqueMaxShutOff           'STATIC_CALL("isBitSet", tighteningErrorStatus, 5)']
                    [virtual  bit               tighteningErrorStatusSelfTapTorqueMinShutOff           'STATIC_CALL("isBitSet", tighteningErrorStatus, 6)']
                    [virtual  bit               tighteningErrorStatusPrevailTorqueMaxShutOff           'STATIC_CALL("isBitSet", tighteningErrorStatus, 7)']
                    [virtual  bit               tighteningErrorStatusPrevailTorqueMinShutOff           'STATIC_CALL("isBitSet", tighteningErrorStatus, 8)']
                    [virtual  bit               tighteningErrorStatusPrevailTorqueCompensateOverflow   'STATIC_CALL("isBitSet", tighteningErrorStatus, 9)']
                    [virtual  bit               tighteningErrorStatusCurrentMonitoringMaxShutOff       'STATIC_CALL("isBitSet", tighteningErrorStatus, 10)']
                    [virtual  bit               tighteningErrorStatusPostViewTorqueMinTorqueShutOff    'STATIC_CALL("isBitSet", tighteningErrorStatus, 11)']
                    [virtual  bit               tighteningErrorStatusPostViewTorqueMaxTorqueShutOff    'STATIC_CALL("isBitSet", tighteningErrorStatus, 12)']
                    [virtual  bit               tighteningErrorStatusPortViewTorqueAngleTooSmall       'STATIC_CALL("isBitSet", tighteningErrorStatus, 13)']
                    [virtual  bit               tighteningErrorStatusTriggerLost                       'STATIC_CALL("isBitSet", tighteningErrorStatus, 14)']
                    [virtual  bit               tighteningErrorStatusTorqueLessThanTarget              'STATIC_CALL("isBitSet", tighteningErrorStatus, 15)']
                    [virtual  bit               tighteningErrorStatusToolHot                           'STATIC_CALL("isBitSet", tighteningErrorStatus, 16)']
                    [virtual  bit               tighteningErrorStatusMultistageAbort                   'STATIC_CALL("isBitSet", tighteningErrorStatus, 17)']
                    [virtual  bit               tighteningErrorStatusRehit                             'STATIC_CALL("isBitSet", tighteningErrorStatus, 18)']
                    [virtual  bit               tighteningErrorStatusDsMeasureFailed                   'STATIC_CALL("isBitSet", tighteningErrorStatus, 19)']
                    [virtual  bit               tighteningErrorStatusCurrentLimitReached               'STATIC_CALL("isBitSet", tighteningErrorStatus, 20)']
                    [virtual  bit               tighteningErrorStatusEndTimeOutShutoff                 'STATIC_CALL("isBitSet", tighteningErrorStatus, 21)']
                    [virtual  bit               tighteningErrorStatusRemoveFastenerLimitExceeded       'STATIC_CALL("isBitSet", tighteningErrorStatus, 22)']
                    [virtual  bit               tighteningErrorStatusDisableDrive                      'STATIC_CALL("isBitSet", tighteningErrorStatus, 23)']
                    [virtual  bit               tighteningErrorStatusTransducerLost                    'STATIC_CALL("isBitSet", tighteningErrorStatus, 24)']
                    [virtual  bit               tighteningErrorStatusTransducerShorted                 'STATIC_CALL("isBitSet", tighteningErrorStatus, 25)']
                    [virtual  bit               tighteningErrorStatusTransducerCorrupt                 'STATIC_CALL("isBitSet", tighteningErrorStatus, 26)']
                    [virtual  bit               tighteningErrorStatusSyncTimeout                       'STATIC_CALL("isBitSet", tighteningErrorStatus, 27)']
                    [virtual  bit               tighteningErrorStatusDynamicCurrentMonitoringMin       'STATIC_CALL("isBitSet", tighteningErrorStatus, 28)']
                    [virtual  bit               tighteningErrorStatusDynamicCurrentMonitoringMax       'STATIC_CALL("isBitSet", tighteningErrorStatus, 29)']
                    [virtual  bit               tighteningErrorStatusAngleMaxMonitor                   'STATIC_CALL("isBitSet", tighteningErrorStatus, 30)']
                    [virtual  bit               tighteningErrorStatusYieldNutOff                       'STATIC_CALL("isBitSet", tighteningErrorStatus, 31)']
                    [virtual  bit               tighteningErrorStatusYieldTooFewSamples                'STATIC_CALL("isBitSet", tighteningErrorStatus, 32)']
                    [const    uint   16         blockIdTorqueMinLimit                             21                   ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                             22                   ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                          23                   ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                     24                   ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                   25                   ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                   26                   ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                           27                   ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                      28                   ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdRundownAngleMin                            29                   ]
                    [simple   uint   40         rundownAngleMin                                                        ]
                    [const    uint   16         blockIdRundownAngleMax                            30                   ]
                    [simple   uint   40         rundownAngleMax                                                        ]
                    [const    uint   16         blockIdRundownAngle                               31                   ]
                    [simple   uint   40         rundownAngle                                                           ]
                    [const    uint   16         blockIdCurrentMonitoringMin                       32                   ]
                    [simple   uint   24         currentMonitoringMin                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringMax                       33                   ]
                    [simple   uint   24         currentMonitoringMax                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringValue                     34                   ]
                    [simple   uint   24         currentMonitoringValue                                                 ]
                    [const    uint   16         blockIdSelfTapMin                                 35                   ]
                    [simple   uint   48         selfTapMin                                                             ]
                    [const    uint   16         blockIdSelfTapMax                                 36                   ]
                    [simple   uint   48         selfTapMax                                                             ]
                    [const    uint   16         blockIdSelfTapTorque                              37                   ]
                    [simple   uint   48         selfTapTorque                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMin                 38                   ]
                    [simple   uint   48         prevailTorqueMonitoringMin                                             ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMax                 39                   ]
                    [simple   uint   48         prevailTorqueMonitoringMax                                             ]
                    [const    uint   16         blockIdPrevailTorque                              40                   ]
                    [simple   uint   48         prevailTorque                                                          ]
                    [const    uint   16         blockIdTighteningId                               41                   ]
                    [simple   string 80         tighteningId                                                           ]
                    [const    uint   16         blockIdJobSequenceNumber                          42                   ]
                    [simple   uint   40         jobSequenceNumber                                                      ]
                    [const    uint   16         blockIdSyncTighteningId                           43                   ]
                    [simple   uint   40         syncTighteningId                                                       ]
                    [const    uint   16         blockIdToolSerialNumber                           44                   ]
                    [simple   string 112        toolSerialNumber                                                       ]
                    [const    uint   16         blockIdTimeStamp                                  45                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeInParameterSetSettings 46                   ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                 ]
                ['3' *Rev3
                    [const    uint   16         blockIdCellId                                     1                    ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                  2                    ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                       3                    ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                  4                    ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                      5                    ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetNumber                         6                    ]
                    [simple   uint   24         parameterSetNumber                                                     ]
                    [const    uint   16         blockIdStrategy                                   7                    ]
                    [simple   Strategy          strategy                                                               ]
                    [const    uint   16         blockIdStrategyOptions                            8                    ]
                    // TODO: Find out how to extract the 10 bits from a 5 byte large value
                    [const    uint   16         blockIdBatchSize                                  9                    ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                               10                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                           11                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdBatchStatus                                12                   ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTorqueStatus                               13                   ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                14                   ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdRundownAngleStatus                         15                   ]
                    [simple   Status            rundownAngleStatus                                                     ]
                    [const    uint   16         blockIdCurrentMonitoringStatus                    16                   ]
                    [simple   Status            currentMonitoringStatus                                                ]
                    [const    uint   16         blockIdSelfTapStatus                              17                   ]
                    [simple   Status            selfTapStatus                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringStatus              18                   ]
                    [simple   Status            prevailTorqueMonitoringStatus                                          ]
                    [const    uint   16         blockIdPrevailTorqueCompensateStatus              19                   ]
                    [simple   Status            prevailTorqueCompensateStatus                                          ]
                    [const    uint   16         blockIdTighteningErrorStatus                      20                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdTorqueMinLimit                             21                   ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                             22                   ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                          23                   ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                     24                   ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                   25                   ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                   26                   ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                           27                   ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                      28                   ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdRundownAngleMin                            29                   ]
                    [simple   uint   40         rundownAngleMin                                                        ]
                    [const    uint   16         blockIdRundownAngleMax                            30                   ]
                    [simple   uint   40         rundownAngleMax                                                        ]
                    [const    uint   16         blockIdRundownAngle                               31                   ]
                    [simple   uint   40         rundownAngle                                                           ]
                    [const    uint   16         blockIdCurrentMonitoringMin                       32                   ]
                    [simple   uint   24         currentMonitoringMin                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringMax                       33                   ]
                    [simple   uint   24         currentMonitoringMax                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringValue                     34                   ]
                    [simple   uint   24         currentMonitoringValue                                                 ]
                    [const    uint   16         blockIdSelfTapMin                                 35                   ]
                    [simple   uint   48         selfTapMin                                                             ]
                    [const    uint   16         blockIdSelfTapMax                                 36                   ]
                    [simple   uint   48         selfTapMax                                                             ]
                    [const    uint   16         blockIdSelfTapTorque                              37                   ]
                    [simple   uint   48         selfTapTorque                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMin                 38                   ]
                    [simple   uint   48         prevailTorqueMonitoringMin                                             ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMax                 39                   ]
                    [simple   uint   48         prevailTorqueMonitoringMax                                             ]
                    [const    uint   16         blockIdPrevailTorque                              40                   ]
                    [simple   uint   48         prevailTorque                                                          ]
                    [const    uint   16         blockIdTighteningId                               41                   ]
                    [simple   string 80         tighteningId                                                           ]
                    [const    uint   16         blockIdJobSequenceNumber                          42                   ]
                    [simple   uint   40         jobSequenceNumber                                                      ]
                    [const    uint   16         blockIdSyncTighteningId                           43                   ]
                    [simple   uint   40         syncTighteningId                                                       ]
                    [const    uint   16         blockIdToolSerialNumber                           44                   ]
                    [simple   string 112        toolSerialNumber                                                       ]
                    [const    uint   16         blockIdTimeStamp                                  45                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeInParameterSetSettings 46                   ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [const    uint   16         blockIdParameterSetName                           47                   ]
                    [simple   string 200        parameterSetName                                                       ]
                    [const    uint   16         blockIdTorqueValueUnit                            48                   ]
                    [simple   Unit              torqueValueUnit                                                        ]
                    [const    uint   16         blockIdResultType                                 49                   ]
                    [simple   ResultType        resultType                                                             ]
                 ]
                ['4' *Rev4
                    [const    uint   16         blockIdCellId                                     1                    ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                  2                    ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                       3                    ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                  4                    ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                      5                    ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetNumber                         6                    ]
                    [simple   uint   24         parameterSetNumber                                                     ]
                    [const    uint   16         blockIdStrategy                                   7                    ]
                    [simple   Strategy          strategy                                                               ]
                    [const    uint   16         blockIdStrategyOptions                            8                    ]
                    // TODO: Find out how to extract the 10 bits from a 5 byte large value
                    [const    uint   16         blockIdBatchSize                                  9                    ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                               10                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                           11                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdBatchStatus                                12                   ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTorqueStatus                               13                   ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                14                   ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdRundownAngleStatus                         15                   ]
                    [simple   Status            rundownAngleStatus                                                     ]
                    [const    uint   16         blockIdCurrentMonitoringStatus                    16                   ]
                    [simple   Status            currentMonitoringStatus                                                ]
                    [const    uint   16         blockIdSelfTapStatus                              17                   ]
                    [simple   Status            selfTapStatus                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringStatus              18                   ]
                    [simple   Status            prevailTorqueMonitoringStatus                                          ]
                    [const    uint   16         blockIdPrevailTorqueCompensateStatus              19                   ]
                    [simple   Status            prevailTorqueCompensateStatus                                          ]
                    [const    uint   16         blockIdTighteningErrorStatus                      20                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdTorqueMinLimit                             21                   ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                             22                   ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                          23                   ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                     24                   ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                   25                   ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                   26                   ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                           27                   ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                      28                   ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdRundownAngleMin                            29                   ]
                    [simple   uint   40         rundownAngleMin                                                        ]
                    [const    uint   16         blockIdRundownAngleMax                            30                   ]
                    [simple   uint   40         rundownAngleMax                                                        ]
                    [const    uint   16         blockIdRundownAngle                               31                   ]
                    [simple   uint   40         rundownAngle                                                           ]
                    [const    uint   16         blockIdCurrentMonitoringMin                       32                   ]
                    [simple   uint   24         currentMonitoringMin                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringMax                       33                   ]
                    [simple   uint   24         currentMonitoringMax                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringValue                     34                   ]
                    [simple   uint   24         currentMonitoringValue                                                 ]
                    [const    uint   16         blockIdSelfTapMin                                 35                   ]
                    [simple   uint   48         selfTapMin                                                             ]
                    [const    uint   16         blockIdSelfTapMax                                 36                   ]
                    [simple   uint   48         selfTapMax                                                             ]
                    [const    uint   16         blockIdSelfTapTorque                              37                   ]
                    [simple   uint   48         selfTapTorque                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMin                 38                   ]
                    [simple   uint   48         prevailTorqueMonitoringMin                                             ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMax                 39                   ]
                    [simple   uint   48         prevailTorqueMonitoringMax                                             ]
                    [const    uint   16         blockIdPrevailTorque                              40                   ]
                    [simple   uint   48         prevailTorque                                                          ]
                    [const    uint   16         blockIdTighteningId                               41                   ]
                    [simple   string 80         tighteningId                                                           ]
                    [const    uint   16         blockIdJobSequenceNumber                          42                   ]
                    [simple   uint   40         jobSequenceNumber                                                      ]
                    [const    uint   16         blockIdSyncTighteningId                           43                   ]
                    [simple   uint   40         syncTighteningId                                                       ]
                    [const    uint   16         blockIdToolSerialNumber                           44                   ]
                    [simple   string 112        toolSerialNumber                                                       ]
                    [const    uint   16         blockIdTimeStamp                                  45                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeInParameterSetSettings 46                   ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [const    uint   16         blockIdParameterSetName                           47                   ]
                    [simple   string 200        parameterSetName                                                       ]
                    [const    uint   16         blockIdTorqueValueUnit                            48                   ]
                    [simple   Unit              torqueValueUnit                                                        ]
                    [const    uint   16         blockIdResultType                                 49                   ]
                    [simple   ResultType        resultType                                                             ]
                    [const    uint   16         blockIdIdentifierResultPart2                      50                   ]
                    [simple   string 200        identifierResultPart2                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart3                      51                   ]
                    [simple   string 200        identifierResultPart3                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart4                      52                   ]
                    [simple   string 200        identifierResultPart4                                                  ]
                 ]
                ['5' *Rev5
                    [const    uint   16         blockIdCellId                                     1                    ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                  2                    ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                       3                    ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                  4                    ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                      5                    ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetNumber                         6                    ]
                    [simple   uint   24         parameterSetNumber                                                     ]
                    [const    uint   16         blockIdStrategy                                   7                    ]
                    [simple   Strategy          strategy                                                               ]
                    [const    uint   16         blockIdStrategyOptions                            8                    ]
                    // TODO: Find out how to extract the 10 bits from a 5 byte large value
                    [const    uint   16         blockIdBatchSize                                  9                    ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                               10                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                           11                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdBatchStatus                                12                   ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTorqueStatus                               13                   ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                14                   ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdRundownAngleStatus                         15                   ]
                    [simple   Status            rundownAngleStatus                                                     ]
                    [const    uint   16         blockIdCurrentMonitoringStatus                    16                   ]
                    [simple   Status            currentMonitoringStatus                                                ]
                    [const    uint   16         blockIdSelfTapStatus                              17                   ]
                    [simple   Status            selfTapStatus                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringStatus              18                   ]
                    [simple   Status            prevailTorqueMonitoringStatus                                          ]
                    [const    uint   16         blockIdPrevailTorqueCompensateStatus              19                   ]
                    [simple   Status            prevailTorqueCompensateStatus                                          ]
                    [const    uint   16         blockIdTighteningErrorStatus                      20                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdTorqueMinLimit                             21                   ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                             22                   ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                          23                   ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                     24                   ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                   25                   ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                   26                   ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                           27                   ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                      28                   ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdRundownAngleMin                            29                   ]
                    [simple   uint   40         rundownAngleMin                                                        ]
                    [const    uint   16         blockIdRundownAngleMax                            30                   ]
                    [simple   uint   40         rundownAngleMax                                                        ]
                    [const    uint   16         blockIdRundownAngle                               31                   ]
                    [simple   uint   40         rundownAngle                                                           ]
                    [const    uint   16         blockIdCurrentMonitoringMin                       32                   ]
                    [simple   uint   24         currentMonitoringMin                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringMax                       33                   ]
                    [simple   uint   24         currentMonitoringMax                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringValue                     34                   ]
                    [simple   uint   24         currentMonitoringValue                                                 ]
                    [const    uint   16         blockIdSelfTapMin                                 35                   ]
                    [simple   uint   48         selfTapMin                                                             ]
                    [const    uint   16         blockIdSelfTapMax                                 36                   ]
                    [simple   uint   48         selfTapMax                                                             ]
                    [const    uint   16         blockIdSelfTapTorque                              37                   ]
                    [simple   uint   48         selfTapTorque                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMin                 38                   ]
                    [simple   uint   48         prevailTorqueMonitoringMin                                             ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMax                 39                   ]
                    [simple   uint   48         prevailTorqueMonitoringMax                                             ]
                    [const    uint   16         blockIdPrevailTorque                              40                   ]
                    [simple   uint   48         prevailTorque                                                          ]
                    [const    uint   16         blockIdTighteningId                               41                   ]
                    [simple   string 80         tighteningId                                                           ]
                    [const    uint   16         blockIdJobSequenceNumber                          42                   ]
                    [simple   uint   40         jobSequenceNumber                                                      ]
                    [const    uint   16         blockIdSyncTighteningId                           43                   ]
                    [simple   uint   40         syncTighteningId                                                       ]
                    [const    uint   16         blockIdToolSerialNumber                           44                   ]
                    [simple   string 112        toolSerialNumber                                                       ]
                    [const    uint   16         blockIdTimeStamp                                  45                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeInParameterSetSettings 46                   ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [const    uint   16         blockIdParameterSetName                           47                   ]
                    [simple   string 200        parameterSetName                                                       ]
                    [const    uint   16         blockIdTorqueValueUnit                            48                   ]
                    [simple   Unit              torqueValueUnit                                                        ]
                    [const    uint   16         blockIdResultType                                 49                   ]
                    [simple   ResultType        resultType                                                             ]
                    [const    uint   16         blockIdIdentifierResultPart2                      50                   ]
                    [simple   string 200        identifierResultPart2                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart3                      51                   ]
                    [simple   string 200        identifierResultPart3                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart4                      52                   ]
                    [simple   string 200        identifierResultPart4                                                  ]
                    [const    uint   16         blockIdCustomerTighteningError                    53                   ]
                    [simple   string 200        customerTighteningError                                                ]
                 ]
                ['6' *Rev6
                    [const    uint   16         blockIdCellId                                     1                    ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                  2                    ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                       3                    ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                  4                    ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                      5                    ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetNumber                         6                    ]
                    [simple   uint   24         parameterSetNumber                                                     ]
                    [const    uint   16         blockIdStrategy                                   7                    ]
                    [simple   Strategy          strategy                                                               ]
                    [const    uint   16         blockIdStrategyOptions                            8                    ]
                    // TODO: Find out how to extract the 10 bits from a 5 byte large value
                    [const    uint   16         blockIdBatchSize                                  9                    ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                               10                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                           11                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdBatchStatus                                12                   ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTorqueStatus                               13                   ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                14                   ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdRundownAngleStatus                         15                   ]
                    [simple   Status            rundownAngleStatus                                                     ]
                    [const    uint   16         blockIdCurrentMonitoringStatus                    16                   ]
                    [simple   Status            currentMonitoringStatus                                                ]
                    [const    uint   16         blockIdSelfTapStatus                              17                   ]
                    [simple   Status            selfTapStatus                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringStatus              18                   ]
                    [simple   Status            prevailTorqueMonitoringStatus                                          ]
                    [const    uint   16         blockIdPrevailTorqueCompensateStatus              19                   ]
                    [simple   Status            prevailTorqueCompensateStatus                                          ]
                    [const    uint   16         blockIdTighteningErrorStatus                      20                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdTorqueMinLimit                             21                   ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                             22                   ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                          23                   ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                     24                   ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                   25                   ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                   26                   ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                           27                   ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                      28                   ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdRundownAngleMin                            29                   ]
                    [simple   uint   40         rundownAngleMin                                                        ]
                    [const    uint   16         blockIdRundownAngleMax                            30                   ]
                    [simple   uint   40         rundownAngleMax                                                        ]
                    [const    uint   16         blockIdRundownAngle                               31                   ]
                    [simple   uint   40         rundownAngle                                                           ]
                    [const    uint   16         blockIdCurrentMonitoringMin                       32                   ]
                    [simple   uint   24         currentMonitoringMin                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringMax                       33                   ]
                    [simple   uint   24         currentMonitoringMax                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringValue                     34                   ]
                    [simple   uint   24         currentMonitoringValue                                                 ]
                    [const    uint   16         blockIdSelfTapMin                                 35                   ]
                    [simple   uint   48         selfTapMin                                                             ]
                    [const    uint   16         blockIdSelfTapMax                                 36                   ]
                    [simple   uint   48         selfTapMax                                                             ]
                    [const    uint   16         blockIdSelfTapTorque                              37                   ]
                    [simple   uint   48         selfTapTorque                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMin                 38                   ]
                    [simple   uint   48         prevailTorqueMonitoringMin                                             ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMax                 39                   ]
                    [simple   uint   48         prevailTorqueMonitoringMax                                             ]
                    [const    uint   16         blockIdPrevailTorque                              40                   ]
                    [simple   uint   48         prevailTorque                                                          ]
                    [const    uint   16         blockIdTighteningId                               41                   ]
                    [simple   string 80         tighteningId                                                           ]
                    [const    uint   16         blockIdJobSequenceNumber                          42                   ]
                    [simple   uint   40         jobSequenceNumber                                                      ]
                    [const    uint   16         blockIdSyncTighteningId                           43                   ]
                    [simple   uint   40         syncTighteningId                                                       ]
                    [const    uint   16         blockIdToolSerialNumber                           44                   ]
                    [simple   string 112        toolSerialNumber                                                       ]
                    [const    uint   16         blockIdTimeStamp                                  45                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeInParameterSetSettings 46                   ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [const    uint   16         blockIdParameterSetName                           47                   ]
                    [simple   string 200        parameterSetName                                                       ]
                    [const    uint   16         blockIdTorqueValueUnit                            48                   ]
                    [simple   Unit              torqueValueUnit                                                        ]
                    [const    uint   16         blockIdResultType                                 49                   ]
                    [simple   ResultType        resultType                                                             ]
                    [const    uint   16         blockIdIdentifierResultPart2                      50                   ]
                    [simple   string 200        identifierResultPart2                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart3                      51                   ]
                    [simple   string 200        identifierResultPart3                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart4                      52                   ]
                    [simple   string 200        identifierResultPart4                                                  ]
                    [const    uint   16         blockIdCustomerTighteningError                    53                   ]
                    [simple   string 200        customerTighteningError                                                ]
                    [const    uint   16         blockIdPrevailTorqueCompensateValue               54                   ]
                    [simple   uint   48         prevailTorqueCompensateValue                                           ]
                    [const    uint   16         blockIdTighteningErrorStatus2                     55                   ]
                    [simple   Status            tighteningErrorStatus2                                                 ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                 ]
                ['7' *Rev7
                    [const    uint   16         blockIdCellId                                     1                    ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                  2                    ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                       3                    ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                  4                    ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                      5                    ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetNumber                         6                    ]
                    [simple   uint   24         parameterSetNumber                                                     ]
                    [const    uint   16         blockIdStrategy                                   7                    ]
                    [simple   Strategy          strategy                                                               ]
                    [const    uint   16         blockIdStrategyOptions                            8                    ]
                    // TODO: Find out how to extract the 10 bits from a 5 byte large value
                    [const    uint   16         blockIdBatchSize                                  9                    ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                               10                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                           11                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdBatchStatus                                12                   ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTorqueStatus                               13                   ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                14                   ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdRundownAngleStatus                         15                   ]
                    [simple   Status            rundownAngleStatus                                                     ]
                    [const    uint   16         blockIdCurrentMonitoringStatus                    16                   ]
                    [simple   Status            currentMonitoringStatus                                                ]
                    [const    uint   16         blockIdSelfTapStatus                              17                   ]
                    [simple   Status            selfTapStatus                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringStatus              18                   ]
                    [simple   Status            prevailTorqueMonitoringStatus                                          ]
                    [const    uint   16         blockIdPrevailTorqueCompensateStatus              19                   ]
                    [simple   Status            prevailTorqueCompensateStatus                                          ]
                    [const    uint   16         blockIdTighteningErrorStatus                      20                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdTorqueMinLimit                             21                   ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                             22                   ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                          23                   ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                     24                   ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                   25                   ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                   26                   ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                           27                   ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                      28                   ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdRundownAngleMin                            29                   ]
                    [simple   uint   40         rundownAngleMin                                                        ]
                    [const    uint   16         blockIdRundownAngleMax                            30                   ]
                    [simple   uint   40         rundownAngleMax                                                        ]
                    [const    uint   16         blockIdRundownAngle                               31                   ]
                    [simple   uint   40         rundownAngle                                                           ]
                    [const    uint   16         blockIdCurrentMonitoringMin                       32                   ]
                    [simple   uint   24         currentMonitoringMin                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringMax                       33                   ]
                    [simple   uint   24         currentMonitoringMax                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringValue                     34                   ]
                    [simple   uint   24         currentMonitoringValue                                                 ]
                    [const    uint   16         blockIdSelfTapMin                                 35                   ]
                    [simple   uint   48         selfTapMin                                                             ]
                    [const    uint   16         blockIdSelfTapMax                                 36                   ]
                    [simple   uint   48         selfTapMax                                                             ]
                    [const    uint   16         blockIdSelfTapTorque                              37                   ]
                    [simple   uint   48         selfTapTorque                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMin                 38                   ]
                    [simple   uint   48         prevailTorqueMonitoringMin                                             ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMax                 39                   ]
                    [simple   uint   48         prevailTorqueMonitoringMax                                             ]
                    [const    uint   16         blockIdPrevailTorque                              40                   ]
                    [simple   uint   48         prevailTorque                                                          ]
                    [const    uint   16         blockIdTighteningId                               41                   ]
                    [simple   string 80         tighteningId                                                           ]
                    [const    uint   16         blockIdJobSequenceNumber                          42                   ]
                    [simple   uint   40         jobSequenceNumber                                                      ]
                    [const    uint   16         blockIdSyncTighteningId                           43                   ]
                    [simple   uint   40         syncTighteningId                                                       ]
                    [const    uint   16         blockIdToolSerialNumber                           44                   ]
                    [simple   string 112        toolSerialNumber                                                       ]
                    [const    uint   16         blockIdTimeStamp                                  45                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeInParameterSetSettings 46                   ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [const    uint   16         blockIdParameterSetName                           47                   ]
                    [simple   string 200        parameterSetName                                                       ]
                    [const    uint   16         blockIdTorqueValueUnit                            48                   ]
                    [simple   Unit              torqueValueUnit                                                        ]
                    [const    uint   16         blockIdResultType                                 49                   ]
                    [simple   ResultType        resultType                                                             ]
                    [const    uint   16         blockIdIdentifierResultPart2                      50                   ]
                    [simple   string 200        identifierResultPart2                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart3                      51                   ]
                    [simple   string 200        identifierResultPart3                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart4                      52                   ]
                    [simple   string 200        identifierResultPart4                                                  ]
                    [const    uint   16         blockIdCustomerTighteningError                    53                   ]
                    [simple   string 200        customerTighteningError                                                ]
                    [const    uint   16         blockIdPrevailTorqueCompensateValue               54                   ]
                    [simple   uint   48         prevailTorqueCompensateValue                                           ]
                    [const    uint   16         blockIdTighteningErrorStatus2                     55                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdCompensatedAngle                           56                   ]
                    [simple   uint   56         compensatedAngle                                                       ]
                    [const    uint   16         blockIdFinalAngleDecimal                          57                   ]
                    [simple   uint   56         finalAngleDecimal                                                      ]
                ]
                ['998' *Rev998
                    [const    uint   16         blockIdCellId                                     1                    ]
                    [simple   uint   32         cellId                                                                 ]
                    [const    uint   16         blockIdChannelId                                  2                    ]
                    [simple   uint   16         channelId                                                              ]
                    [const    uint   16         blockIdTorqueControllerName                       3                    ]
                    [simple   string 200        torqueControllerName                                                   ]
                    [const    uint   16         blockIdVinNumber                                  4                    ]
                    [simple   string 200        vinNumber                                                              ]
                    [const    uint   16         blockIdJobId                                      5                    ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdParameterSetNumber                         6                    ]
                    [simple   uint   24         parameterSetNumber                                                     ]
                    [const    uint   16         blockIdStrategy                                   7                    ]
                    [simple   Strategy          strategy                                                               ]
                    [const    uint   16         blockIdStrategyOptions                            8                    ]
                    // TODO: Find out how to extract the 10 bits from a 5 byte large value
                    [const    uint   16         blockIdBatchSize                                  9                    ]
                    [simple   uint   32         batchSize                                                              ]
                    [const    uint   16         blockIdBatchCounter                               10                   ]
                    [simple   uint   32         batchCounter                                                           ]
                    [const    uint   16         blockIdTighteningStatus                           11                   ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [const    uint   16         blockIdBatchStatus                                12                   ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [const    uint   16         blockIdTorqueStatus                               13                   ]
                    [simple   Status            torqueStatus                                                           ]
                    [const    uint   16         blockIdAngleStatus                                14                   ]
                    [simple   Status            angleStatus                                                            ]
                    [const    uint   16         blockIdRundownAngleStatus                         15                   ]
                    [simple   Status            rundownAngleStatus                                                     ]
                    [const    uint   16         blockIdCurrentMonitoringStatus                    16                   ]
                    [simple   Status            currentMonitoringStatus                                                ]
                    [const    uint   16         blockIdSelfTapStatus                              17                   ]
                    [simple   Status            selfTapStatus                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringStatus              18                   ]
                    [simple   Status            prevailTorqueMonitoringStatus                                          ]
                    [const    uint   16         blockIdPrevailTorqueCompensateStatus              19                   ]
                    [simple   Status            prevailTorqueCompensateStatus                                          ]
                    [const    uint   16         blockIdTighteningErrorStatus                      20                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdTorqueMinLimit                             21                   ]
                    [simple   uint   48         torqueMinLimit                                                         ]
                    [const    uint   16         blockIdTorqueMaxLimit                             22                   ]
                    [simple   uint   48         torqueMaxLimit                                                         ]
                    [const    uint   16         blockIdTorqueFinalTarget                          23                   ]
                    [simple   uint   48         torqueFinalTarget                                                      ]
                    [const    uint   16         blockIdTorque                                     24                   ]
                    [simple   uint   48         torque                                                                 ]
                    [const    uint   16         blockIdAngleMin                                   25                   ]
                    [simple   uint   40         angleMin                                                               ]
                    [const    uint   16         blockIdAngleMax                                   26                   ]
                    [simple   uint   40         angleMax                                                               ]
                    [const    uint   16         blockIdFinalAngleTarget                           27                   ]
                    [simple   uint   40         finalAngleTarget                                                       ]
                    [const    uint   16         blockIdAngle                                      28                   ]
                    [simple   uint   40         angle                                                                  ]
                    [const    uint   16         blockIdRundownAngleMin                            29                   ]
                    [simple   uint   40         rundownAngleMin                                                        ]
                    [const    uint   16         blockIdRundownAngleMax                            30                   ]
                    [simple   uint   40         rundownAngleMax                                                        ]
                    [const    uint   16         blockIdRundownAngle                               31                   ]
                    [simple   uint   40         rundownAngle                                                           ]
                    [const    uint   16         blockIdCurrentMonitoringMin                       32                   ]
                    [simple   uint   24         currentMonitoringMin                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringMax                       33                   ]
                    [simple   uint   24         currentMonitoringMax                                                   ]
                    [const    uint   16         blockIdCurrentMonitoringValue                     34                   ]
                    [simple   uint   24         currentMonitoringValue                                                 ]
                    [const    uint   16         blockIdSelfTapMin                                 35                   ]
                    [simple   uint   48         selfTapMin                                                             ]
                    [const    uint   16         blockIdSelfTapMax                                 36                   ]
                    [simple   uint   48         selfTapMax                                                             ]
                    [const    uint   16         blockIdSelfTapTorque                              37                   ]
                    [simple   uint   48         selfTapTorque                                                          ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMin                 38                   ]
                    [simple   uint   48         prevailTorqueMonitoringMin                                             ]
                    [const    uint   16         blockIdPrevailTorqueMonitoringMax                 39                   ]
                    [simple   uint   48         prevailTorqueMonitoringMax                                             ]
                    [const    uint   16         blockIdPrevailTorque                              40                   ]
                    [simple   uint   48         prevailTorque                                                          ]
                    [const    uint   16         blockIdTighteningId                               41                   ]
                    [simple   string 80         tighteningId                                                           ]
                    [const    uint   16         blockIdJobSequenceNumber                          42                   ]
                    [simple   uint   40         jobSequenceNumber                                                      ]
                    [const    uint   16         blockIdSyncTighteningId                           43                   ]
                    [simple   uint   40         syncTighteningId                                                       ]
                    [const    uint   16         blockIdToolSerialNumber                           44                   ]
                    [simple   string 112        toolSerialNumber                                                       ]
                    [const    uint   16         blockIdTimeStamp                                  45                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [const    uint   16         blockIdDateTimeOfLastChangeInParameterSetSettings 46                   ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [const    uint   16         blockIdParameterSetName                           47                   ]
                    [simple   string 200        parameterSetName                                                       ]
                    [const    uint   16         blockIdTorqueValueUnit                            48                   ]
                    [simple   Unit              torqueValueUnit                                                        ]
                    [const    uint   16         blockIdResultType                                 49                   ]
                    [simple   ResultType        resultType                                                             ]
                    [const    uint   16         blockIdIdentifierResultPart2                      50                   ]
                    [simple   string 200        identifierResultPart2                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart3                      51                   ]
                    [simple   string 200        identifierResultPart3                                                  ]
                    [const    uint   16         blockIdIdentifierResultPart4                      52                   ]
                    [simple   string 200        identifierResultPart4                                                  ]
                    [const    uint   16         blockIdCustomerTighteningError                    53                   ]
                    [simple   string 200        customerTighteningError                                                ]
                    [const    uint   16         blockIdPrevailTorqueCompensateValue               54                   ]
                    [simple   uint   48         prevailTorqueCompensateValue                                           ]
                    [const    uint   16         blockIdTighteningErrorStatus2                     55                   ]
                    // TODO: Find out how to extract the 32 bits from a 10 byte large value
                    [const    uint   16         blockIdNumberOfStagesInMultistage                 56                   ]
                    [simple   uint   16         numberOfStagesInMultistage                                             ]
                    [const    uint   16         blockIdNumberOfStageResults                       57                   ]
                    [implicit uint   16         numberOfStageResults   'COUNT(stageResults)'                           ]
                    [const    uint   16         blockIdStageResults                               58                   ]
                    [array    StageResult       stageResults        count 'numberOfStageResults'                       ]
                ]
                ['999' *Rev999Light
                    [simple   string 200        vinNumber                                                              ]
                    [simple   uint   16         jobId                                                                  ]
                    [simple   uint   24         parameterSetId                                                         ]
                    [simple   uint   32         batchSize                                                              ]
                    [simple   uint   32         batchCounter                                                           ]
                    [simple   BatchStatus       batchStatus                                                            ]
                    [simple   NokOk             tighteningStatus                                                       ]
                    [simple   Status            torqueStatus                                                           ]
                    [simple   Status            angleStatus                                                            ]
                    [simple   uint   48         torque                                                                 ]
                    [simple   uint   40         angle                                                                  ]
                    [simple   string 152        timeStamp                                                              ]
                    [simple   string 152        dateTimeOfLastChangeIndParameterSetSettings                            ]
                    [simple   string 80         tighteningId                                                           ]
                ]
            ]
        ]

        ['AlarmSubscribe' *AlarmSubscribe
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['Alarm' *Alarm
            [typeSwitch revision
                ['1' *Rev1
                    [const    uint   16         blockIdErrorCode              1                                        ]
                    [simple   string 32         errorCode                                                              ]
                    [const    uint   16         blockIdControllerReadyStatus  2                                        ]
                    [simple   NokOk             controllerReadyStatus                                                  ]
                    [const    uint   16         blockIdToolReadyStatus        3                                        ]
                    [simple   NokOk             toolReadyStatus                                                        ]
                    [const    uint   16         blockIdTime                   4                                        ]
                    [simple   string 152        alarmTime                                                              ]
                ]
                ['2' *Rev2
                    [const    uint   16         blockIdErrorCode              1                                        ]
                    [simple   string 40         errorCode                                                              ]
                    [const    uint   16         blockIdControllerReadyStatus  2                                        ]
                    [simple   NokOk             controllerReadyStatus                                                  ]
                    [const    uint   16         blockIdToolReadyStatus        3                                        ]
                    [simple   NokOk             toolReadyStatus                                                        ]
                    [const    uint   16         blockIdTime                   4                                        ]
                    [simple   string 152        alarmTime                                                              ]
                    [const    uint   16         blockIdAlarmText              5                                        ]
                    [simple   string 400        alarmText                                                              ]
                ]
            ]
        ]
        ['AlarmAcknowledge' *AlarmAcknowledge
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
        ['AlarmUnsubscribe' *AlarmUnsubscribe
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]

        ['AlarmStatus' *AlarmStatus
            [typeSwitch revision
                ['1' *Rev1
                    [const    uint   16         blockIdAlarmStatus              1                                      ]
                    [simple   AlarmActiveStatus controllerAlarmStatus                                                  ]
                    [const    uint   16         blockIdErrorCode                2                                      ]
                    [simple   string 32         errorCode                                                              ]
                    [const    uint   16         blockIdControllerReadyStatus   3                                       ]
                    [simple   NokOk             controllerReadyStatus                                                  ]
                    [const    uint   16         blockIdToolReadyStatus         4                                       ]
                    [simple   NokOk             toolReadyStatus                                                        ]
                    [const    uint   16         blockIdTime                    5                                       ]
                    [simple   string 152        alarmTime                                                              ]
                ]
                ['2' *Rev2
                    [const    uint   16         blockIdAlarmStatus              1                                      ]
                    [simple   AlarmActiveStatus controllerAlarmStatus                                                  ]
                    [const    uint   16         blockIdErrorCode                2                                      ]
                    [simple   string 40         errorCode                                                              ]
                    [const    uint   16         blockIdControllerReadyStatus    3                                      ]
                    [simple   NokOk             controllerReadyStatus                                                  ]
                    [const    uint   16         blockIdToolReadyStatus          4                                      ]
                    [simple   NokOk             toolReadyStatus                                                        ]
                    [const    uint   16         blockIdTime                     5                                      ]
                    [simple   string 152        alarmTime                                                              ]
                ]
            ]
        ]

        ['AlarmStatusAcknowledge' *AlarmStatusAcknowledge
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]

        ['SetTime' *SetTime
            [typeSwitch revision
                ['1' *Rev1
                    [simple   string 152        timeToSet                                                              ]
                ]
            ]
        ]

        ['ExecuteDynamicJobRequest' *ExecuteDynamicJobRequest
            [typeSwitch revision
                ['1' *Rev1
                    [const    uint   16         blockIdJobId                          1                                ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdJobName                        2                                ]
                    [simple   string 200        jobName                                                                ]
                    [const    uint   16         blockIdNumberOfParameterSets          3                                ]
                    //[implicit uint   16         numberOfParameterSets     'COUNT(jobList)'                           ]
                    [const    uint   16         blockIdJobList                        4                                ]
                    // TODO [array    ParameterSetRev1      jobList     count 'numberOfParameterSets'  ]
                    [const    uint   16         blockIdForcedOrder                    5                                ]
                    [simple   ForcedOrder       forcedOrder                                                            ]
                    [const    uint   16         blockIdLockAtJobDone                  6                                ]
                    [simple   NoYes             lockAtJobDone                                                          ]
                    [const    uint   16         blockIdToolLoosening                  7                                ]
                    [simple   ToolLoosening     toolLoosening                                                          ]
                    [const    uint   16         blockIdRepeatJob                      8                                ]
                    [simple   NoYes             repeatJob                                                              ]
                    [const    uint   16         blockIdJobBatchModeAndCountType       9                                ]
                    [simple   JobBatchMode      jobBatchModeAndCountType                                               ]
                    [const    uint   16         blockIdBatchStatusAtIncrementBypass   10                               ]
                    [simple   OkNok             batchStatusAtIncrementBypass                                           ]
                    [const    uint   16         blockIdDecrementBatchAtOkLoosening    11                               ]
                    [simple   NoYes             decrementBatchAtOkLoosening                                            ]
                    [const    uint   16         blockIdMaxTimeForFirstTightening      12                               ]
                    [simple   uint   32         maxTimeForFirstTightening                                              ]
                    [const    uint   16         blockIdMaxTimeToCompleteJob           13                               ]
                    [simple   uint   40         maxTimeToCompleteJob                                                   ]
                    [const    uint   16         blockIdDisplayResultAtAutoSelect      14                               ]
                    [simple   uint   32         displayResultAtAutoSelect                                              ]
                    [const    uint   16         blockIdUseLineControl                 15                               ]
                    [simple   NoYes             useLineControl                                                         ]
                    [const    uint   16         blockIdIdentifierResultPart           16                               ]
                    [simple   IdentifierResult  identifierResultPart                                                   ]
                    [const    uint   16         blockIdResultOfNonTightenings         17                               ]
                    [simple   NoYes             resultOfNonTightenings                                                 ]
                    [const    uint   16         blockIdResetAllIdentifiersAtJobDone   18                               ]
                    [simple   NoYes             resetAllIdentifiersAtJobDone                                           ]
                    [const    uint   16         blockIdReserved                       19                               ]
                    [simple   uint   8          jobRepair                                                              ]
                ]
                ['999' *Rev999
                    [const    uint   16         blockIdJobId                          1                                ]
                    [simple   uint   32         jobId                                                                  ]
                    [const    uint   16         blockIdJobName                        2                                ]
                    [simple   string 200        jobName                                                                ]
                    [const    uint   16         blockIdNumberOfParameterSets          3                                ]
                    //[implicit uint   16         numberOfParameterSets     'COUNT(jobList)'                           ]
                    [const    uint   16         blockIdJobList                        4                                ]
                    // TODO [array    ParameterSetRev999      jobList     count 'numberOfParameterSets'  ]
                    [const    uint   16         blockIdForcedOrder                    5                                ]
                    [simple   ForcedOrder       forcedOrder                                                            ]
                    [const    uint   16         blockIdLockAtJobDone                  6                                ]
                    [simple   NoYes             lockAtJobDone                                                          ]
                    [const    uint   16         blockIdToolLoosening                  7                                ]
                    [simple   ToolLoosening     toolLoosening                                                          ]
                    [const    uint   16         blockIdRepeatJob                      8                                ]
                    [simple   NoYes             repeatJob                                                              ]
                    [const    uint   16         blockIdJobBatchModeAndCountType       9                                ]
                    [simple   JobBatchMode      jobBatchModeAndCountType                                               ]
                    [const    uint   16         blockIdBatchStatusAtIncrementBypass   10                               ]
                    [simple   OkNok             batchStatusAtIncrementBypass                                           ]
                    [const    uint   16         blockIdDecrementBatchAtOkLoosening    11                               ]
                    [simple   NoYes             decrementBatchAtOkLoosening                                            ]
                    [const    uint   16         blockIdMaxTimeForFirstTightening      12                               ]
                    [simple   uint   32         maxTimeForFirstTightening                                              ]
                    [const    uint   16         blockIdMaxTimeToCompleteJob           13                               ]
                    [simple   uint   40         maxTimeToCompleteJob                                                   ]
                    [const    uint   16         blockIdDisplayResultAtAutoSelect      14                               ]
                    [simple   uint   32         displayResultAtAutoSelect                                              ]
                    [const    uint   16         blockIdUseLineControl                 15                               ]
                    [simple   NoYes             useLineControl                                                         ]
                    [const    uint   16         blockIdIdentifierResultPart           16                               ]
                    [simple   IdentifierResult  identifierResultPart                                                   ]
                    [const    uint   16         blockIdResultOfNonTightenings         17                               ]
                    [simple   NoYes             resultOfNonTightenings                                                 ]
                    [const    uint   16         blockIdResetAllIdentifiersAtJobDone   18                               ]
                    [simple   NoYes             resetAllIdentifiersAtJobDone                                           ]
                    [const    uint   16         blockIdReserved                       19                               ]
                    [simple   uint   8          jobRepair                                                              ]
                ]
            ]
        ]
        ['IdentifierDownloadRequest' *IdentifierDownloadRequest
            [typeSwitch revision
                ['1' *Rev1
                    [simple   string 800        identifierData                                                         ]
                ]
            ]
        ]

        ['ResultTracesCurve' *ResultTracesCurve
            [typeSwitch revision
                ['1' *Rev1
                    // TODO: Need to be able to serialize enum arrays [implicit uint   24         numberOfTraceTypes    'COUNT(traceTypes)'  ]
                    // TODO: Need to be able to serialize enum arrays [array    TraceType         traceTypes     count 'numberOfTraceTypes'  ]
                ]
            ]
        ]

        ['ResultTracesCurvePlotData' *ResultTracesCurvePlotData
            [typeSwitch revision
                ['1' *Rev1
                    [simple   string 80         resultDataIdentifier                                                   ]
                    [simple   string 152        timeStamp                                                              ]
                    [implicit uint   24         numberOfParameterDataFields    'COUNT(dataFields)'                     ]
                    [array    VariableDataField dataFields     count 'numberOfParameterDataFields'                     ]
                ]
            ]
        ]

        ['ProgramPsetSelectionInDynamicJob' *ProgramPsetSelectionInDynamicJob
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint   24         parameterSetId                                                         ]
                ]
            ]
        ]
        ['DynamicPsetSelection' *DynamicPsetSelection
            [typeSwitch revision
                ['1' *Rev1
                    [simple   uint   24         parameterSetId                                                         ]
                    [implicit uint   24         numberOfParameterDataFields    'COUNT(dataFields)'                     ]
                    [array    VariableDataField dataFields     count 'numberOfParameterDataFields'                     ]
                ]
            ]
        ]

        ['LinkLevelPositiveAcknowledge' *LinkLevelPositiveAcknowledge
            [typeSwitch revision
                ['1' *Rev1
                    [simple   Mid                  midNumber                                                           ]
                ]
            ]
        ]
        ['LinkLevelNegativeAcknowledge' *LinkLevelNegativeAcknowledge
            [typeSwitch revision
                ['1' *Rev1
                    [simple   Mid                  midNumber                                                           ]
                    [simple   LinkLevelNegativeAcknowledgeError error                                                  ]
                ]
            ]
        ]
        ['KeepAliveOpenProtocolCommunication' *KeepAliveOpenProtocolCommunication
            [typeSwitch revision
                ['1' *Rev1
                ]
            ]
        ]
    ]
    [const         uint 8  end                  0x00                                       encoding='"unsigned-binary"']
]

[type VariableDataField
    [simple   uint 40 parameterId                                                                                      ]
    [implicit uint 24 length      'COUNT(dataValue)'                                                                   ]
    [simple   uint 16 dataType                                                                                         ]
    [simple   uint 24 unit                                                                                             ]
    [simple   uint 24 stepNumber                                                                                       ]
    [array    byte    dataValue   length 'length'                                                                      ]
]

[type StageResult
    [simple   uint 48 stageTorqueValue                                                                                 ]
    [simple   uint 40 stageTurningAngleValue                                                                           ]
]

[enum uint 32 Mid
    ['1'    ApplicationCommunicationStart                                                                              ] // OK *
    ['2'    ApplicationCommunicationStartAcknowledge                                                                   ] // OK *
    ['3'    ApplicationCommunicationStop                                                                               ] // OK
    ['4'    ApplicationCommandError                                                                                    ] // OK *
    ['5'    ApplicationCommandAccepted                                                                                 ] // OK *
    ['6'    ApplicationGenericDataRequest                                                                              ] // OK
    ['7'    Reserved                                                                                                   ]
    ['8'    ApplicationGenericSubscription                                                                             ] // OK *
    ['9'    ApplicationGenericUnsubscribe                                                                              ] // OK *
    ['10'   ParameterSetIdUploadRequest                                                                                ] // OK *
    ['11'   ParameterSetIdUploadReply                                                                                  ] // OK *
    ['12'   ParameterSetDataUploadRequest                                                                              ] // OK *
    ['13'   ParameterSetDataUploadReply                                                                                ] // OK *
    ['14'   ParameterSetSelectedSubscribe                                                                              ] // OK
    ['15'   ParameterSetSelected                                                                                       ] // OK
    ['16'   ParameterSetSelectedAcknowledge                                                                            ] // OK
    ['17'   ParameterSetSelectedUnsubscribe                                                                            ] // OK
    ['18'   SelectParameterSet                                                                                         ] // OK *
    ['19'   SetParameterSetBatchSize                                                                                   ] // OK
    ['20'   ResetParameterSetBatchCounter                                                                              ] // OK
    ['21'   LockAtBatchDoneSubscribe                                                                                   ] // OK
    ['22'   LockAtBatchDoneUpload                                                                                      ] // OK
    ['23'   LockAtBatchDoneUploadAcknowledge                                                                           ] // OK
    ['24'   LockAtBatchDoneUnsubscribe                                                                                 ] // OK
    ['25'   ReservedForFord                                                                                            ] // OK

    ['30'   JobIdUploadRequest                                                                                         ]
    ['31'   JobIdUploadReply                                                                                           ]
    ['32'   JobDataUploadRequest                                                                                       ]
    ['33'   JobDataUploadReply                                                                                         ]
    ['34'   JobInfoSubscribe                                                                                           ]
    ['35'   JobInfo                                                                                                    ]
    ['36'   JobInfoAcknowledge                                                                                         ]
    ['37'   JobInfoUnsubscribe                                                                                         ]
    ['38'   SelectJob                                                                                                  ]
    ['39'   JobRestart                                                                                                 ]
    ['40'   ToolDataUploadRequest                                                                                      ]
    ['41'   ToolDataUploadReply                                                                                        ]
    ['42'   DisableTool                                                                                                ] // OK *
    ['43'   EnableTool                                                                                                 ] // OK *
    ['44'   DisconnectToolRequest                                                                                      ]
    ['45'   SetCalibrationValueRequest                                                                                 ]
    ['46'   SetPrimaryToolRequest                                                                                      ]
    ['47'   PairingHandling                                                                                            ]
    ['48'   PairingStatus                                                                                              ]
    ['49'   PairingStatusAcknowledge                                                                                   ]
    ['50'   VehicleIdNumberDownloadRequest                                                                             ]
    ['51'   VehicleIdNumberSubscribe                                                                                   ]
    ['52'   VehicleIdNumber                                                                                            ]
    ['53'   VehicleIdNumberAcknowledge                                                                                 ]
    ['54'   VehicleIdNumberUnsubscribe                                                                                 ]

    ['60'   LastTighteningResultDataSubscribe                                                                          ] // OK *
    ['61'   LastTighteningResultData                                                                                   ] // OK *
    ['62'   LastTighteningResultDataAcknowledge                                                                        ]
    ['63'   LastTighteningResultDataUnsubscribe                                                                        ]
    ['64'   OldTighteningResultUploadRequest                                                                           ]
    ['65'   OldTighteningResultUploadReply                                                                             ]

    ['70'   AlarmSubscribe                                                                                             ] // OK *
    ['71'   Alarm                                                                                                      ] // OK *
    ['72'   AlarmAcknowledge                                                                                           ] // OK *
    ['73'   AlarmUnsubscribe                                                                                           ] // OK *
    ['74'   AlarmAcknowledgedOnController                                                                              ]
    ['75'   AlarmAcknowledgedOnControllerAcknowledge                                                                   ]
    ['76'   AlarmStatus                                                                                                ] // OK *
    ['77'   AlarmStatusAcknowledge                                                                                     ] // OK *
    ['78'   AcknowledgeAlarmRemotelyOnController                                                                       ]

    ['80'   ReadTimeUploadRequest                                                                                      ]
    ['81'   ReadTimeUploadReply                                                                                        ]
    ['82'   SetTime                                                                                                    ] // OK *

    ['90'   MultiSpindleStatusSubscribe                                                                                ]
    ['91'   MultiSpindleStatus                                                                                         ]
    ['92'   MultiSpindleStatusAcknowledge                                                                              ]
    ['93'   MultiSpindleStatusUnsubscribe                                                                              ]

    ['100'  MultiSpindleResultSubscribe                                                                                ]
    ['101'  MultiSpindleResult                                                                                         ]
    ['102'  MultiSpindleResultAcknowledge                                                                              ]
    ['103'  MultiSpindleResultUnsubscribe                                                                              ]

    ['105'  LastPowerMacsTighteningResultDataSubscribe                                                                 ]
    ['106'  LastPowerMacsTighteningResultStationData                                                                   ]
    ['107'  LastPowerMacsTighteningResultBoltData                                                                      ]
    ['108'  LastPowerMacsTighteningResultDataAcknowledge                                                               ]
    ['109'  LastPowerMacsTighteningResultDataUnsubscribe                                                               ]
    ['110'  DisplayUserTextOnCompact                                                                                   ]
    ['111'  DisplayUserTextOnGraph                                                                                     ]

    ['113'  FlashGreenLightOnTool                                                                                      ]

    ['120'  JobLineControlInfoSubscribe                                                                                ]
    ['121'  JobLineControlStarted                                                                                      ]
    ['122'  JobLineControlAlert1                                                                                       ]
    ['123'  JobLineControlAlert2                                                                                       ]
    ['124'  JobLineControlDone                                                                                         ]
    ['125'  JobLineControlInfoAcknowledge                                                                              ]
    ['126'  JobLineControlUnsubscribe                                                                                  ]
    ['127'  AbortJob                                                                                                   ]
    ['128'  JobBatchIncrement                                                                                          ]
    ['129'  JobBatchDecrement                                                                                          ]
    ['130'  JobOff                                                                                                     ]
    ['131'  SetJobLineControlStart                                                                                     ]
    ['132'  SetJobLineControlAlert1                                                                                    ]
    ['133'  SetJobLineControlAlert2                                                                                    ]

    ['140'  ExecuteDynamicJobRequest                                                                                   ] // OK *

    ['150'  IdentifierDownloadRequest                                                                                  ] // OK *
    ['151'  MultipleIdentifiersWorkOrderSubscribe                                                                      ]
    ['152'  MultipleIdentifiersWorkOrder                                                                               ]
    ['153'  MultipleIdentifiersWorkOrderAcknowledge                                                                    ]
    ['154'  MultipleIdentifiersWorkOrderUnsubscribe                                                                    ]
    ['155'  BypassIdentifier                                                                                           ]
    ['156'  ResetLatestIdentifier                                                                                      ]
    ['157'  ResetAllIdentifiers                                                                                        ]

    ['200'  SetExternalControlledRelays                                                                                ]

    ['210'  StatusExternalMonitoredInputsSubscribe                                                                     ]
    ['211'  StatusExternalMonitoredInputs                                                                              ]
    ['212'  StatusExternalMonitoredInputsAcknowledge                                                                   ]
    ['213'  StatusExternalMonitoredInputsUnsubscribe                                                                   ]
    ['214'  IoDeviceStatusRequest                                                                                      ]
    ['215'  IoDeviceStatusReply                                                                                        ]
    ['216'  RelayFunctionSubscribe                                                                                     ]
    ['217'  RelayFunction                                                                                              ]
    ['218'  RelayFunctionAcknowledge                                                                                   ]
    ['219'  RelayFunctionUnsubscribe                                                                                   ]
    ['220'  DigitalInputFunctionSubscribe                                                                              ]
    ['221'  DigitalInputFunction                                                                                       ]
    ['222'  DigitalInputFunctionAcknowledge                                                                            ]
    ['223'  DigitalInputFunctionUnsubscribe                                                                            ]
    ['224'  SetDigitalInputFunction                                                                                    ]
    ['225'  ResetDigitalInputFunction                                                                                  ]

    ['240'  UserDataDownload                                                                                           ]
    ['241'  UserDataSubscribe                                                                                          ]
    ['242'  UserData                                                                                                   ]
    ['243'  UserDataAcknowledge                                                                                        ]
    ['244'  UserDataUnsubscribe                                                                                        ]
    ['245'  UserDataDownloadWithOffset                                                                                 ]

    ['250'  SelectorSocketInfoSubscribe                                                                                ]
    ['251'  SelectorSocketInfo                                                                                         ]
    ['252'  SelectorSocketInfoAcknowledge                                                                              ]
    ['253'  SelectorSocketInfoUnsubscribe                                                                              ]
    ['254'  SelectorControlGreenLights                                                                                 ]
    ['255'  SelectorControlRedLights                                                                                   ]

    ['260'  ToolTagIdRequest                                                                                           ]
    ['261'  ToolTagIdSubscribe                                                                                         ]
    ['262'  ToolTagId                                                                                                  ]
    ['263'  ToolTagIdAcknowledge                                                                                       ]
    ['264'  ToolTagIdUnsubscribe                                                                                       ]

    ['270'  ControllerRebootRequest                                                                                    ]

    ['300'  HistogramUploadRequest                                                                                     ]
    ['301'  HistogramUploadReply                                                                                       ]

    ['400'  AutomaticManualModeSubscribe                                                                               ]
    ['401'  AutomaticManualMode                                                                                        ]
    ['402'  AutomaticManualModeAcknowledge                                                                             ]
    ['403'  AutomaticManualModeUnsubscribe                                                                             ]

    ['410'  AutoDisableSettingsRequest                                                                                 ]
    ['411'  AutoDisableSettingsReply                                                                                   ]

    ['420'  OpenProtocolCommandsDisabledSubscribe                                                                      ]
    ['421'  OpenProtocolCommandsDisabled                                                                               ]
    ['422'  OpenProtocolCommandsDisabledAcknowledge                                                                    ]
    ['423'  OpenProtocolCommandsDisabledUnsubscribe                                                                    ]

    ['500'  MotorTuningResultDataSubscribe                                                                             ]
    ['501'  MotorTuningResultData                                                                                      ]
    ['502'  MotorTuningResultDataAcknowledge                                                                           ]
    ['503'  MotorTuningResultDataUnsubscribe                                                                           ]
    ['504'  MotorTuningRequest                                                                                         ]

    ['700'  TighteningDataDownloadStatusForRadioTools                                                                  ]

    ['900'  ResultTracesCurve                                                                                          ] // OK *
    ['901'  ResultTracesCurvePlotData                                                                                  ] // OK *

    ['1201' LastOperationResultOverallData                                                                             ]
    ['1202' LastOperationResultObjectData                                                                              ]
    ['1203' LastOperationResultDataAcknowledge                                                                         ]

    ['2100' DeviceCommand                                                                                              ]

    ['2500' ProgramDataDownload                                                                                        ]
    ['2501' ProgramDataUploadReply                                                                                     ]
    ['2502' PasswordRequest                                                                                            ]
    ['2503' PasswordReply                                                                                              ] // PasswordResponse in the documentation
    ['2504' ProgramPsetSelectionInDynamicJob                                                                           ] // OK
    ['2505' DynamicPsetSelection                                                                                       ] // OK

    ['2600' ModeIdUploadRequest                                                                                        ]
    ['2601' ModeIdUploadReply                                                                                          ]
    ['2602' ModeDataUploadRequest                                                                                      ]
    ['2603' ModeDataUploadReply                                                                                        ]
    ['2604' ModeSelected                                                                                               ]
    ['2605' ModeSelectedAcknowledge                                                                                    ]
    ['2606' SelectMode                                                                                                 ]

    ['8000' AudiEmergencyStatusSubscribe                                                                               ]
    ['8001' AudiEmergencyStatus                                                                                        ]
    ['8002' AudiEmergencyStatusAcknowledge                                                                             ]
    ['8003' AudiEmergencyStatusUnsubscribe                                                                             ]

    ['9997' LinkLevelPositiveAcknowledge                                                                               ] // OK
    ['9998' LinkLevelNegativeAcknowledge                                                                               ] // OK
    ['9999' KeepAliveOpenProtocolCommunication                                                                         ] // OK *
]

[enum uint 16 ApplicationCommunicationError
    ['0'  NoError                                                                                                      ]
    ['1'  InvalidData                                                                                                  ]
    ['2'  ParameterSetIdNotPresent                                                                                     ]
    ['3'  ParameterSetCanNotBeSet                                                                                      ]
    ['4'  ParameterSetNotRunning                                                                                       ]

    ['6'  VinUploadSubscriptionAlreadyExists                                                                           ]
    ['7'  VinUploadSubscriptionDoesNotExist                                                                            ]
    ['8'  VinInputSourceNotGranted                                                                                     ]
    ['9'  LastTighteningResultSubscriptionAlreadyExists                                                                ]
    ['10' LastTighteningResultSubscriptionDoesNowExist                                                                 ]
    ['11' AlarmSubscriptionAlreadyExists                                                                               ]
    ['12' AlarmSubscriptionDoesNotExist                                                                                ]
    ['13' ParameterSetSubscriptionAlreadyExists                                                                        ]
    ['14' ParameterSetSubscriptionDoesNotExist                                                                         ]
    ['15' TighteningIdRequestedNotFound                                                                                ]
    ['16' ConnectionRejectedProtocolBusy                                                                               ]
    ['17' JobIdNotPresent                                                                                              ]
    ['18' JobInfoSubscriptionAlreadyExists                                                                             ]
    ['19' JobInfoSubscriptionDoesNotExist                                                                              ]
    ['20' JobCanNotBeSet                                                                                               ]
    ['21' JobNotRunning                                                                                                ]
    ['22' NotPossibleToExecuteDynamicJobRequest                                                                        ]
    ['23' JobBatchDecrementFailed                                                                                      ]
    ['24' NotPossibleToCreatePset                                                                                      ]
    ['25' ProgrammingControlNotGranted                                                                                 ]
    ['26' WrongToolTypeToPsetDownloadConnected                                                                         ]
    ['27' ToolIsInaccessible                                                                                           ]
    ['28' JobAbortionIsInProgress                                                                                      ]

    ['30' ControllerIdNotASyncMasterOrStationController                                                                ]
    ['31' MultiSpindleStatusSubscriptionAlreadyExists                                                                  ]
    ['32' MultiSpindleStatusSubscriptionDoesNotExist                                                                   ]
    ['33' MultiSpindleResultSubscriptionAlreadyExists                                                                  ]
    ['34' MultiSpindleResultSubscriptionDoesNotExist                                                                   ]
    ['35' OtherMasterClientAlreadyConnected                                                                            ]

    ['40' JobLineControlInfoSubscriptionAlreadyExists                                                                  ]
    ['41' JobLineControlInfoSubscriptionDoesNotExist                                                                   ]
    ['42' IdentifierInputSourceNotGranted                                                                              ]
    ['43' MultipleIdentifiersWorkOrderSubscriptionAlreadyExists                                                        ]
    ['44' MultipleIdentifiersWorkOrderSubscriptionDoesNotExist                                                         ]

    ['50' StatusExternalMonitoredInputsSubscriptionAlreadyExists                                                       ]
    ['51' StatusExternalMonitoredInputsSubscriptionDoesNotExist                                                        ]
    ['52' IoDeviceNotConnected                                                                                         ]
    ['53' FaultyIoDeviceId                                                                                             ]
    ['54' ToolTagIdUnknown                                                                                             ]
    ['55' ToolTagIdSubscriptionAlreadyExists                                                                           ]
    ['56' ToolTagIdSubscriptionDoesNotExist                                                                            ]
    ['57' ToolMotorTuningFailed                                                                                        ]
    ['58' NoAlarmPresent                                                                                               ]
    ['59' ToolCurrentlyInUse                                                                                           ]
    ['60' NoHistogramAvailable                                                                                         ]
    ['61' PairingFailed                                                                                                ]
    ['62' PairingDenied                                                                                                ]
    ['63' PairingOrPairingAbortionAttemptOrWrongToolType                                                               ]
    ['64' PairingAbortionDenied                                                                                        ]
    ['65' PairingAbortionFailed                                                                                        ]
    ['66' PairingDisconnectionFailed                                                                                   ]
    ['67' PairingInProgressOrAlreadyDone                                                                               ]
    ['68' PairingDeniedNoProgramControl                                                                                ]
    ['69' UnsupportedExtraDataRevision                                                                                 ]
    ['70' CalibrationFailed                                                                                            ]
    ['71' SubscriptionAlreadyExists                                                                                    ]
    ['72' SubscriptionDoesNotExist                                                                                     ]
    ['73' SubscribedMidUnsupported                                                                                     ]
    ['74' SubscribedMidRevisionUnsupported                                                                             ]
    ['75' RequestedMidUnsupported                                                                                      ]
    ['76' RequestedMidRevisionUnsupported                                                                              ]
    ['77' RequestedOnSpecificDataNotSupported                                                                          ]
    ['78' SubscriptionOnSpecificDataNotSupported                                                                       ]
    ['79' CommandFailed                                                                                                ]
    ['80' AudiEmergencyStatusSubscriptionAlreadyExists                                                                 ] // AudiEmergencyStatusSubscriptionExists
    ['81' AudiEmergencyStatusSubscriptionDoesNotExist                                                                  ]
    ['82' AutomaticOrManualModeSubscriptionAlreadyExists                                                               ] // AutomaticOrManualModeSubscribeAlreadyExists
    ['83' AutomaticOrManualModeSubscriptionDoesNotExist                                                                ] // AutomaticOrManualModeSubscribeDoesNotExist
    ['84' TheRelayFunctionSubscriptionAlreadyExists                                                                    ]
    ['85' TheRelayFunctionSubscriptionDoesNotExist                                                                     ]
    ['86' TheSelectorSocketInfoSubscriptionAlreadyExists                                                               ]
    ['87' TheSelectorSocketInfoSubscriptionDoesNotExist                                                                ]
    ['88' TheDiginInfoSubscriptionAlreadyExists                                                                        ]
    ['89' TheDiginInfoSubscriptionDoesNotExist                                                                         ]
    ['90' LockAtBatchDoneSubscriptionAlreadyExists                                                                     ]
    ['91' LockAtBatchDoneSubscriptionDoesNotExist                                                                      ]
    ['92' OpenProtocolCommendsDisabled                                                                                 ]
    ['93' OpenProtocolCommendsDisabledSubscriptionAlreadyExists                                                        ]
    ['94' OpenProtocolCommendsDisabledSubscriptionDoesNotExist                                                         ]
    ['95' RejectRequestPowerMacsIsInManualMode                                                                         ]
    ['96' RejectConnectionClientAlreadyConnected                                                                       ]
    ['97' MidRevisionUnsupported                                                                                       ]
    ['98' ControllerInternalRequestTimeout                                                                             ]
    ['99' UnknownMid                                                                                                   ]
]

[enum uint 32 LinkLevelNegativeAcknowledgeError
   ['0' NoError                                                                                                        ]
   ['1' InvalidLength                                                                                                  ]
   ['2' InvalidRevision                                                                                                ]
   ['3' InvalidSequenceNumber                                                                                          ]
   ['4' InconsistencyOfNumberOfMessages                                                                                ]
]

[enum uint 8 RotationDirection
    ['0' Undefined                                                                                                     ]
    ['1' Clockwise                                                                                                     ]
    ['2' CounterClockwise                                                                                              ]
]

[enum uint 8 NokOk
    ['0' NOK                                                                                                           ]
    ['1' OK                                                                                                            ]
]

[enum uint 8 OkNok
    ['0' OK                                                                                                            ]
    ['1' NOK                                                                                                           ]
]

[enum uint 8 NoYes
    ['0' No                                                                                                            ]
    ['1' Yes                                                                                                           ]
]

[enum uint 8 Status
    ['0' Low                                                                                                           ]
    ['1' OK                                                                                                            ]
    ['2' High                                                                                                          ]
]

[enum uint 8 BatchStatus
    ['0' NOK                                                                                                           ]
    ['1' OK                                                                                                            ]
    ['2' Unused                                                                                                        ]
]

[enum uint 16 Strategy
    ['1'  TorqueControl                                                                                                ]
    ['2'  TorqueControlAngleMonitoring                                                                                 ]
    ['3'  TorqueControlAngleControlAnd                                                                                 ]
    ['4'  AngleControlTorqueMonitoring                                                                                 ]
    ['5'  DsControl                                                                                                    ]
    ['6'  DsControlTorqueMonitoring                                                                                    ]
    ['7'  ReverseAngle                                                                                                 ]
    ['8'  ReverseTorque                                                                                                ]
    ['9'  ClickWrench                                                                                                  ]
    ['10' RotateSpindleForward                                                                                         ]
    ['11' TorqueControlAngleControlOr                                                                                  ]
    ['12' RotateSpindleReverse                                                                                         ]
    ['13' HomePositionForward                                                                                          ]
    ['14' EpMonitoring                                                                                                 ]
    ['15' Yield                                                                                                        ]
    ['16' EpFixed                                                                                                      ]
    ['17' EpControl                                                                                                    ]
    ['18' EpAngleShutoff                                                                                               ]
    ['19' YieldTorqueControlOr                                                                                         ]
    ['20' SnugGradient                                                                                                 ]
    ['21' ResidualTorqueTime                                                                                           ]
    ['22' ResidualTorqueAngle                                                                                          ]
    ['23' BreakawayPeak                                                                                                ]
    ['24' LooseAndTightening                                                                                           ]
    ['25' HomePositionReverse                                                                                          ]
    ['26' PvtCompWithSnug                                                                                              ]
    ['99' NoStrategy                                                                                                   ]
]

[enum uint 8 Unit
    ['1' Nm                                                                                                            ]
    ['2' LbfFt                                                                                                         ]
    ['3' LbfIn                                                                                                         ]
    ['4' Kpm                                                                                                           ]
    ['5' KfgCm                                                                                                         ]
    ['6' OzfIn                                                                                                         ]
    ['7' Percent                                                                                                       ]
    ['8' Ncm                                                                                                           ]
]

[enum uint 8 ResultType
    ['1' Tightening                                                                                                    ]
    ['2' Loosening                                                                                                     ]
    ['3' BatchIncrement                                                                                                ]
    ['4' BatchDecrement                                                                                                ]
    ['5' BypassParameterSetResult                                                                                      ]
    ['6' AbortJobResult                                                                                                ]
    ['7' SyncTightening                                                                                                ]
    ['8' ReferenceSetup                                                                                                ]
]

[enum uint 24 TraceType
    ['1'   AngleTrace                                                                                                  ]
    ['2'   TorqueTrace                                                                                                 ]
    ['3'   CurrentTrace                                                                                                ]
    ['4'   GradientTrace                                                                                               ]
    ['5'   StrokeTrace                                                                                                 ]
    ['6'   ForceTrace                                                                                                  ]
    ['999' UnsubscribeOnAll                                                                                            ]
]

[enum uint 8 AlarmActiveStatus
    ['0'   NoAlarmIsActive                                                                                             ]
    ['1'   AlarmIsActive                                                                                               ]
]

[enum uint 8 ForcedOrder
    ['0'   FreeOrder                                                                                                   ]
    ['1'   ForcedOrder                                                                                                 ]
    ['2'   FreeAndForced                                                                                               ]
]

[enum uint 8 ToolLoosening
    ['0'   Enable                                                                                                      ]
    ['1'   Disable                                                                                                     ]
    ['2'   EnableOnlyOnNokTightening                                                                                   ]
]

[enum uint 8 JobBatchMode
    ['0'   OnlyOkTighteningsAreCounted                                                                                 ]
    ['1'   BothOkAndNokTighteningsAreCounted                                                                           ]
]

[enum uint 8 IdentifierResult
    ['0'   JobVinNumber                                                                                                ]
    ['1'   Other                                                                                                       ]
]
